python数据处理之文本向量化(独热编码和词嵌入)

您所在的位置:网站首页 文本向量化 python python数据处理之文本向量化(独热编码和词嵌入)

python数据处理之文本向量化(独热编码和词嵌入)

#python数据处理之文本向量化(独热编码和词嵌入)| 来源: 网络整理| 查看: 265

1.处理文本数据

神经网络不会接收原始的文本作为输入,它只能处理数值型张量。于是,文本向量化便是对文本处理的关键一步,所谓文本向量化就是将文本转化为数值型张量的过程。他有多种实现方式:

将文本分割成单词,将每个单词转化为一个向量将文本分割成字符,将每个字符转化为一个向量提取单词或者字符的n-gram,并将每个n-gram转化为一个向量。n-gram是多个连续单词或字符的集

由于大多数场景中单独对字符进行编码就会失去文本字符之间本来的关系,所以大多时候对单词编码较多。

2.单词级的one-hot编码 #用Kears实现单词级的one-hot编码 from keras_preprocessing.text import Tokenizer#tokenizer是一个分词器 samples=["The cat sat on the mat","The dog ate my homework"] tokenizer=Tokenizer(num_words=1000)#设置只考虑前1000个单词 tokenizer.fit_on_texts(samples)#构建单词索引 sequences=tokenizer.texts_to_sequences(samples)#句子中的单词转化成为以单词索引如“[[1, 2, 3, 4, 1, 5], [1, 6, 7, 8, 9]]” one_hot_results=tokenizer.texts_to_matrix(samples,mode="binary")#进行one_hot编码 word_index=tokenizer.word_index#查看对应单词和数字的对应关系 print(sequences) print(one_hot_results) print(word_index)

结果如下: 在这里插入图片描述

3.词嵌入

one-hor编码得到的向量是二进制的、稀疏的、维度很高的。而词嵌入是低维度的、密集的、浮点数向量。词嵌入是从数据中学习而来一般通过神经网络训练而来。这里我们就对词嵌入进行解释。 词嵌入就是将人类语言映射到几何空间中,一个词与一个密集向量相关联。例如,在一个合理的词嵌入空间中,同义词应该被嵌入到相似的词空间中。

实现方式:

#使用词嵌入 #利用Embedding层学习词嵌入 from tensorflow .keras.datasets import imdb from tensorflow.keras import preprocessing from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Flatten,Dense,Embedding max_features=10000#设置10000个单词作为特征单词的数量 max_len=20#设置20个单词为考察对象 (x_train,y_train),(x_test,y_test)=imdb.load_data(num_words=max_features)#获取数据集imdb #这里是把训练集和测试集转换为形状为(samples,maxlen)的二维整数张量 x_train=preprocessing.sequence.pad_sequences(x_train,maxlen=max_len)#这里将后20个单词作为考察对象 x_test=preprocessing.sequence.pad_sequences(x_test,max_len)#同上 #构建模型 model=Sequential() #Embedding层就像一个字典,根据单词序号返回对应的词向量。参数的含义是输入形状为10000,长度为20,宽度为8的数据 model.add(Embedding(10000,8,input_length=max_len))# #将数据转换成10000,20×8的二维数据 model.add(Flatten()) #接上全链接层分类 model.add(Dense(1,activation="sigmoid")) model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['acc']) model.summary() #epochs表示训练数据被使用的次数,一个epoch表示优化算法将全部数据使用了一次batch_size表示每次迭代都使用32个样本,validation_split表示验证集的大小为0.2 history=model.fit(x_train,y_train,epochs=10,batch_size=32,validation_split=0.2)

这样子我们就设计了一个学习词嵌入的神经网络。看一下效果:

在这里插入图片描述 10次的训练,准确率达到了75.46%效果还是不错的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3